import {defineConfig,Plugin} from 'vite';
import vue from '@vitejs/plugin-vue';
import path from 'path';
import dts from 'vite-plugin-dts';
// import {viteStaticCopy} from 'vite-plugin-static-copy'; // 使用默认导入
import fs from 'fs';
import fse from 'fs-extra'; // 引入 fs-extra 进行文件复制


// 自定义插件，用于压缩并保存 JSON 文件到多个目录
const jsonMinifyPlugin = (): Plugin => ({
    name: 'json-minify-plugin',
    apply: 'build', // 只在打包时运行
    closeBundle() {
        const inputPath = path.resolve(__dirname, 'web-types-raw.json');
        const jsonOutputPath = path.resolve(__dirname, 'web-types.json'); // 目标 JSON 目录
        try {
            // 读取并压缩 JSON 文件
            const originalJson = fs.readFileSync(inputPath, 'utf-8');
            const minifiedJson = JSON.stringify(JSON.parse(originalJson));
            ensureDirectoryExistence(jsonOutputPath);
            fs.writeFileSync(jsonOutputPath, minifiedJson);
            console.log('已保存到根目录: web-types.json');
        } catch (err) {
            console.error('压缩 JSON 文件时出错:', err);
        }
    },
});

// 工具函数：确保目录存在
function ensureDirectoryExistence(filePath) {
    const dir = path.dirname(filePath);
    if (!fs.existsSync(dir)) {
        fs.mkdirSync(dir, { recursive: true });
    }
}

// 自定义插件，用于将 dist 中的 global.d.ts 复制到根目录
const copyGlobalDtsPlugin = (): Plugin => ({
    name: 'copy-global-dts',
    apply: 'build',
    closeBundle() {
        console.log('es 目录:', fs.readdirSync(path.resolve(__dirname, 'es')));
        const sourcePath = path.resolve(__dirname, 'es/global.d.ts');
        const targetPath = path.resolve(__dirname, 'global.d.ts');
        try {
            // 使用 fs-extra 进行文件复制
            fse.copySync(sourcePath, targetPath);
            console.log('已将 global.d.ts 文件复制到根目录');
        } catch (err) {
            console.error('复制 global.d.ts 文件时出错:', err);
        }
    }
});


export default defineConfig({
    resolve: {
        alias: {
            '@': path.resolve(__dirname, 'src'),
        },
    },
    css: {
        preprocessorOptions: {
            scss: {
                additionalData: `
            @use "@/styles/variables.scss" as *;
            @use "@/styles/element/index.scss" as *;
            `
            }
        }
    },
    build: {
        sourcemap: false,
        lib: {
            entry: path.resolve(__dirname, 'src/index.ts'),
            name: 'devecoui-plus',
            fileName: (format) => `deveco-ui-plus.${format}.js`
        },
        rollupOptions: {
            external: ['vue', 'element-plus'],
            output: {
                globals: {
                    vue: 'Vue',
                    'element-plus': 'ElementPlus'
                }
            },
        }
    },
    plugins: [
        jsonMinifyPlugin(),
        copyGlobalDtsPlugin(), // 添加复制 global.d.ts 文件的插件
        vue(),
        dts({
            outDir: 'es',
            insertTypesEntry: false,  // 确保生成入口文件
            compilerOptions: {
                baseUrl: ".",  // 确保 baseUrl 设置正确
                paths: {
                    "@/*": ["src/*"],  // 配置路径别名
                    "devecoui-plus": ["src/index.ts"]
                },
                types: ["vite/client", "vue"]
            }
        }),
        // viteStaticCopy({
        //     targets: [
        //         {
        //             src: 'web-types.json', // 源文件路径
        //             dest: 'json' // 输出目录，留空表示复制到构建输出的根目录
        //         }
        //     ]
        // }) // 使用默认导入的插件
    ],
});
